package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
	Id     int
	Name   string
	Age    int
	gender string // 小写字母开头的，进行json编码会忽略
}

func main() {
	// 在网络中传输的时候，把Student结构体，编码成json字符串，传输=》结构体=》字符串=》编码

	// 接收字符串，需要将字符串转换成结构体，然后操作=》字符串=》结构体=》解密

	lily := Student{1, "Lily", 20, "女"}

	fmt.Println(lily)

	// func json.Marshal(v interface{}) ([]byte, error)
	// 编码  结构体=》字符串
	encodeInfo, err := json.Marshal(&lily)
	if err != nil {
		fmt.Println("json.Marshal err: ", err)
		return
	}

	fmt.Println("encodingInfo: ", string(encodeInfo))

	// 对端接收到
	// 反序列化（解码）：字符串=》结构体
	var lily2 Student
	if err := json.Unmarshal([]byte(encodeInfo), &lily2); err != nil {
		fmt.Println("json.Unmarshal err: ", err)
		return
	}

	fmt.Println("name: ", lily2.Name)
	fmt.Println("gender: ", lily2.gender)
	fmt.Println("age: ", lily2.Age)

}

/*

encodingInfo:  {"Id":1,"Name":"Lily","Age":20}
name:  Lily
gender:
age:  20

*/
